;
;	�������������� ������� ��
;	-------------------------
;
Edit_sector:
	call	Read_sector		;��������� ������
        call	Disp_sector		;����� Sector �� �����
        mov	[B],byte 0              ;����������� ���������
	mov	[Nt],byte 0		; �������
	call	Set_cursor		;������������� �������
.M1:	call	Read_byte          	;�������� ������� �������
	cmp	al,0h			;��� ����������� �������?
	jne	.M3		        ; ���
	cmp	ah,3Ch			;��� F2?
	jne	.M2			; ���
	call	Write_sector            ;�������� Sector
	jmp	.Exit                   ;�����
.M2:	cmp	ah,3Eh			;��� F4?
	je	.Exit			; ��, ����� �����
	call	Edit_command		;���������� �������
	jmp	.M1			;��������� �������
.M3:	cmp	ax,011Bh		;ESC - �������?
	je	.Exit			; ��, ����� �����
	call	Test_digit_hex		;��� �����. �����
	jc	.M1            		; ���, ����� �������� ������� �������
	call	Write_digit_sector	;�����. ����� -> Sector
	jmp	.M1                     ;��������� �������
.Exit:	call	Set_cursor	        ;������������� �������
	call	Read_sector		;��������� ������
	call	Disp_sector		;����� Sector �� �����
	ret
B	db	0			;����� �������������� ����� � ���������� ���������� Sector
Nt	db	0			;����� (0 ��� 1) ������������� ������� � �����. 0 - ������� �������, 1 - �������
;
;	�������� ����������������� �����
;	--------------------------------
; ����: AL - ASCII ���
; �����: DL - �����
;	 CF 1 - ���, 0 - ��
Test_digit_hex:    
	cmp	al,30h			;��� ������� ������ 30h
	jb	.M2			; ��, ��������� ��� ��� �� ����� � �������
	cmp	al,39h			;��� ������� ������ 39h
	ja	.M1			; ��, ��������� ������
	mov	dl,al		        ;����������� ���� ������� � ������� DL
	sub	dl,30h			;�������� �� ���� 30h
	clc				;CF <- 0
	jmp	.Exit			;�������
.M1:	cmp	al,41h			;��� ������� ������ 41h
	jb	.M2			; ��, ��������� ��� ��� �� ����� � ������� 
	cmp	al,46h			;��� ������� ������ 46h
	ja	.M2			; ��, ��������� ��� ��� �� ����� � ������� 
	mov	dl,al			;����������� ���� ������� � ������� DL
	sub	dl,37h                  ;�������� �� ���� 37h
	clc                             ;CF <- 0
	jmp	.Exit                   ;�������
.M2:	stc                             ;CF <- 1
.Exit:	ret                             ;�����

Write_digit_sector:
	push	ax
	push	bx
	xor	ax,ax
	xor	bx,bx
	mov	bl,[B]
	mov	al,[Sector+bx]
        cmp	[Nt],byte 0		;Nt = 0
	je	.M			; ��
	and	al,0f0h
	or	al,dl
	jmp	.Exit
.M:	and	al,0fh
	shl	dl,4
	or	al,dl
.Exit:	mov	[Sector+bx],al
	call	Set_cursor		;������������� �������
	call	Disp_sector	        ;����� Sector �� �����
	call	Cur_right 
	pop bx
	pop ax
	ret

Edit_command:
	push	bx
	pushf
	mov	bx,.Edit_Table		;BX <- adres tablici
.M1:	cmp	byte[bx],0ffh		;Konec tablici?
	je	.Exit			;Da, koda net v tablice
	cmp	ah,[bx]			;Eto vhod v tablicu?
	je	.Dispatch		;Da, vipolnit komandu
	add	bx,3			;Net, perehod k
	clc				; sleduyschemu
	jmp	.M2			; elementu tablici
.Dispatch:
 	inc	bx			;Adres proceduri
	call	[bx]			;Vizov proceduri
.Exit:	stc				; CF <- 1
.M2:	jnc	.M1			;Povtorenie dly novogo elementa tablici
	popf
	pop	bx
	ret
; Tablica soderjit skan-kodi upravlyuschih klavish i adresa
; procedur, vipolnyuschih sootvetstvuyuschie komandi
.Edit_Table	db	4dh		;<Right>
		dw	Cur_right
		db	4bh		;<Left>
		dw	Cur_left
		db	48h		;<Top>
		dw	Cur_top
		db	50h		;<Down>
		dw	Cur_down
		db	0ffh		;Konec tablici


		